package com.jianguozh.difs.support.service.sys.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jianguozh.difs.support.service.sys.entity.Client;
import com.jianguozh.difs.support.service.sys.entity.Res;
import com.jianguozh.difs.support.service.sys.entity.Role;
import com.jianguozh.difs.support.service.sys.vo.RoleGrantedClientVo;
import com.jianguozh.difs.support.service.sys.vo.RoleGrantedResVo;
import org.apache.ibatis.annotations.Param;

import java.io.Serializable;
import java.util.List;

/**
 * <p>
 * 角色 Mapper 接口
 * </p>
 *
 * @author hanrs
 * @since 2022-03-17
 */
public interface RoleMapper extends BaseMapper<Role> {

    /**
     * 获取角色被授予的应用
     *
     * @param roleId
     * @return
     */
    List<Client> selectListGrantedClient(@Param("roleId") String roleId);

    /**
     * 获取角色被授予的应用的资源
     *
     * @param roleId
     * @param clientId
     * @return
     */
    List<Res> selectListGrantedRes(@Param("roleId") String roleId, @Param("clientId") String clientId);

    /**
     * 应用可分配的角色
     *
     * @param clientId
     * @return
     */
    List<Role> selectListByClientId(@Param("clientId") String clientId);

    /**
     * 插入角色应用关联关系
     *
     * @param roleId
     * @param clientId
     */
    void insertRoleClient(@Param("roleId") String roleId, @Param("clientId") String clientId);

    /**
     * 插入角色资源关联关系
     * @param roleId
     * @param resIds
     */
    void insertRoleRes(@Param("roleId") String roleId, @Param("resIds") List<String> resIds);

    /**
     * 删除角色用户关联
     *
     * @param roleId
     */
    void deleteRoleUser(@Param("roleId") Serializable roleId);

    /**
     * 删除角色全部应用关联
     *
     * @param roleId
     */
    void deleteRoleAllClient(@Param("roleId") Serializable roleId);

    /**
     * 删除角色应用关联
     *
     * @param roleId
     */
    void deleteRoleClient(@Param("roleId") Serializable roleId, @Param("clientId") String clientId);

    /**
     * 删除角色资源关联
     *
     * @param roleId
     */
    void deleteRoleRes(@Param("roleId") Serializable roleId);

    /**
     * 删除角色应用资源关联
     *
     * @param roleId
     */
    void deleteRoleClientRes(@Param("roleId") Serializable roleId, @Param("clientId") Serializable clientId);


}
